package com.h2cloud.aspect.cacheAble;

import java.lang.annotation.*;

/**
 * 清除缓存
 * 方法的请求参数要与缓存方法的请求参数保持一致
 *
 * * 不支持清除本地线程中缓存 清除没意义，请求结束后自动销毁
 * @author xp7
 *
 */
@Documented
@Target({ ElementType.METHOD,ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface CacheableEvict {

    /**
     * 清除缓存的key
     * 自定义key+请求参数
     *
     * p.s. 若"缓存注解方法"没自定义key，key值需要填写"缓存注解方法"对象的全路径名称及方法名（全路径名称与方法名之间用"."间隔）
     * com.bj58.ehr.corehr.biz.workflowrecord.dao.service.impl.getRecordByProcessInstanceId
     * @return
     */
    String key() ;


    /**
     * 自定义参数名称
     * 参数来源自当前请求参数
     *
     * 举例：
     * 原来"缓存注解方法"中参数仅为 processInstanceId
     *     @Cacheable(key = "getRecordByProcessInstanceId",expire = 10)
     *     public WorkflowRecordIndex getRecordByProcessInstanceId(String processInstanceId) {
     *         ...
     *     }
     * "清除缓存注解方法"中的参数"多于缓存注解方法"，所以注解中的paramName参数需要重新设置
     *     @CacheableEvict(key = "getRecordByProcessInstanceId", paramName = {"processInstanceId"})
     *     public int updateRecordIndex(String processInstanceId, Long targetBid, String employeeNumber, LocalDate startTime...){
     *         ...
     *     }
     *
     * @return {@link String[]}
     */
    String[] paramName() default {};

//    /**
//     * 已自定义过key不需要传此参数
//     * 用于定位缓存方法
//     * @return
//     */
//    String targetMethodName() default "";
//    /**
//     * 已自定义过key不需要传此参数
//     * 用于定位缓存对象
//     * @return
//     */
//   String targetClassName() default "" ;

}
